//
//  LTQUserModel.swift
//  WeiBoProject
//
//  Created by MAC on 16/2/27.
//  Copyright © 2016年 LTQ. All rights reserved.
//

import UIKit

class LTQUserModel: NSObject,NSCoding {
    /*
    返回值字段 	字段类型 	字段说明
    access_token 	string 	用于调用access_token，接口获取授权后的access token。
    expires_in 	string 	access_token的生命周期，单位是秒数。
    remind_in 	string 	access_token的生命周期（该参数即将废弃，开发者请使用expires_in）。
    uid 	string 	当前授权用户的UID。
    */
    
    var access_token: String?
    var expires_in: NSTimeInterval = 0{
        didSet{
            expires_date = NSDate(timeIntervalSinceNow: expires_in)
        }
    }
    
    var uid: String?
///  用户头像地址（中图），50×50像素
    var profile_image_url: String?
///   用户昵称
    var screen_name: String?
    
//    token_access会过期的时间
    var expires_date: NSDate?
    override init() {
        super.init()
    }
    
///  KVC赋值
    init(dic :[String: NSObject]) {
//        写了系统方法后必须调用一下父类的方法
        super.init()
        setValuesForKeysWithDictionary(dic)
    }

//    防止KVC键值不匹配，造成的崩溃
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
    }
    
//    获取信息保存的路径
    func save (file: String){
        
//      获取沙盒路径
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        
//        拼接沙盒路径
        let filePath = (path as NSString).stringByAppendingPathComponent(file)
        
//        将对象保存到指定的文件路径中
        NSKeyedArchiver.archiveRootObject(self, toFile: filePath)
        
    }
    
//    解档数据
    // 实例方法,必须创建一个对象
    // 类方法,用关键字 class
    class func readUserModel(file: String)->(LTQUserModel?){
        
        //      获取沙盒路径
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        
        //        拼接沙盒路径
        let filePath = (path as NSString).stringByAppendingPathComponent(file)
        
        //        将对象保存到指定的文件路径中
      let model = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as? LTQUserModel
        /*
        case OrderedAscending
        case OrderedSame
        case OrderedDescending
        */
        if let date = model?.expires_date{
            
            if date.compare(NSDate()) == .OrderedDescending{
                return model
            }
            return nil
        }
        return nil
    }
    
    
//    将对象转为二进制进行存储，写入进去
    func encodeWithCoder(aCoder: NSCoder) {

        aCoder.encodeObject(access_token, forKey: "access_token")
        aCoder.encodeObject(expires_date, forKey: "expires_date")
        aCoder.encodeObject(uid, forKey: "uid")
        aCoder.encodeObject(profile_image_url, forKey: "profile_image_url")
        aCoder.encodeObject(screen_name, forKey: "screen_name")
        
    }
    
//    二进制数据转成对象，读取出来
    required init?(coder aDecoder: NSCoder) {
 
        self.access_token = aDecoder.decodeObjectForKey("access_token") as? String
        self.expires_date = (aDecoder.decodeObjectForKey("expires_date") as? NSDate)!
        self.uid = aDecoder.decodeObjectForKey("uid") as? String
        
        self.profile_image_url = aDecoder.decodeObjectForKey("profile_image_url") as? String
        self.screen_name = aDecoder.decodeObjectForKey("screen_name") as? String
     
    }

}
